package com.soup.lab.executor.pool;

import java.util.List;
import java.util.function.Predicate;

public interface Taggable {

    /**
     * 批量打标
     * @param tags  需要打标的标签列表
     */
    default void tag(Tag... tags) {
        if(tags == null || tags.length == 0) {
            return;
        }
        for (Tag tag : tags) {
            tag(tag);
        }
    }

    /**
     * 打标
     * @param tag   需要打标的标签
     */
    void tag(Tag tag);

    /**
     * 获取所有标签
     * @return  当前对象已经标记的标签列表
     */
    List<Tag> getTags();

    /**
     * 移除满足条件的标签
     * @param filter    过滤条件
     * @return  被过滤条件筛选移除的标签
     */
    List<Tag> removeIf(Predicate<Tag> filter);

    /**
     * 清除所有标签
     */
    void clear();

}
